package com.young.design.pattern.future;

/**
 * @ClassName : FutureData
 * @Author : hyy
 * @Date: 2020-03-14
 */

public class FutureData implements Data {
    private static RealData realData;
    private boolean isRead = false;

    public synchronized void setRealData(RealData realData) {
        // 如果已经准备好，realData已经设置完成，可以直接返回， 如果没有准备好，设置realData 对象，并通知其他等待线程
        if (isRead) {
            return;
        }
        this.realData = realData;
        isRead = true;
        notifyAll();
    }

    @Override
    public synchronized String getResult() throws InterruptedException {
        // 如果已经准备好直接返回，如果没有准备好等待
        if (!isRead) {
            System.out.println(Thread.currentThread().getName()+"\t 还没准备好,挂起线程进入等待状态");
            wait();
        }
        return realData.getResult();
    }
}
